const Router = require("koa-router");
const router = new Router();

const { returnMsg, queryFn, jwtVerify } = require("../../utils");
const fs = require("fs");
const multer = require("@koa/multer"); //加载koa-multer模块
const path = require("path");

let myFileName = ""; // 存储文件的名称 返回给前端的文件名

// 创建存放头像图片的目录(当头像目录不存在时)
fs.readdir(__dirname + "/images/", function (err, files) {
  if (err) {
    fs.mkdir(__dirname + "/images/", function (err) {
      if (err) {
        console.log(err);
      }
      console.log("目录创建成功。");
    });
  }
});

var storage = multer.diskStorage({
  //文件保存路径
  destination: function (req, file, cb) {
    cb(null, path.join(__dirname, "upload/"));
  },
  //修改文件名称
  filename: function (req, file, cb) {
    let type = file.originalname.split(".").splice(-1);
    // logo.png -> logo.xxx.png
    myFileName = `${file.fieldname}-${Date.now().toString(16)}.${type}`;
    cb(null, myFileName);
  },
});

//文件上传限制
const limits = {
  fields: 1, //非文件字段的数量
  fileSize: 200 * 1024, //文件大小 单位 b
  files: 1, //文件数量
};
const upload = multer({ storage, limits });

// avatar是前端upload组件的name
router.post("/", upload.single("avatar"), async (ctx) => {
  let token = ctx.request.headers["cms-token"];
  //鉴权
  if (!jwtVerify(token)) {
    ctx.body = returnMsg(2, "查询用户信息失败", "tokeni期或该用户不存在");
    return;
  }
  //签权成功，修改token对应数数据的avatar宁段
  const sql = `UPDATE cms_user SET avatar='${myFileName}' WHERE token='${token}'`;
  await queryFn(sql);

  //重新查找这条数据，并且返回给前端
  let sql1 = `SELECT username,avatar,token FROM cms_user WHERE token='${token}'`;
  let result = await queryFn(sql1);

  ctx.body = returnMsg(0, "修改成功", {
    avatar: result[0].avatar,
    username: result[0].username,
    "cms-token": result[0].token,
  });
  //   // 当前接口允许跨域
  //   ctx.set("Access-Control-Allow-Origin", "*");
  //   ctx.set(
  //     "Access-Control-Allow-Headers",
  //     "Content-Type, Content-Length, Authorization, Accept, X-Requested-With"
  //   );
  //   ctx.set("Access-Control-Allow-Methods", "PUT, POST, GET, DELETE, OPTIONS");

  //   // 获取文件
  //   // console.log(ctx.req.file);

  //   // 验证token
  //   let token = ctx.request.headers["cms-token"];

  //   // 查询token对应的用户

  //   // 数组长度为0，代表这个token查询不到任何用户

  //   let result = await new Promise((resolve, reject) => {
  //     // 获取token对应的用户
  //     const sql = `UPDATE user SET avatar='${myfilename}' WHERE token='${token}'`;
  //     query(sql, (err, data) => {
  //       if (err) reject(err);
  //       resolve(true);
  //     });
  //   });

  //   if (result) {
  //     ctx.body = msgFormat(0, "图片上传成功", {
  //       // 要求前端自行补全域名
  //       filePath: `${myfilename}`,
  //     });
  //   } else {
  //     ctx.body = msgFormat(1, "操作失败请重试");
  //   }
});

module.exports = router;

/* 
【图片上传】
1、前后端要协约好图片的字段-avatar
2、后端逻辑：
    a.鉴权
    b.接收到前端传过来的图片
        -判断是否超过大小限制（20k）
        -设置单图上传
        -修改图片名字（aaa-时间戳.jpg）
        -存储前端传过来的图片
        -读取这个文件的路径，存入数据库替换avatar字段的值
        -读取数据库的整条用户信息，返回给前端
3、前端逻辑：
    a.调用组件
    b.设置请求的地址和token
    c.修改localstorage.更新header组件
*/
